package com.javabase.study.OOPFistPart;

/**
 * TODO
 * 内容：测试对象转型
 * 作者:jxx
 * 创建时间：2021/6/16
 */
public class TestCasting {
    public static void main(String[] args){

        //父类引用变量 指向子类对象 向上转型，自动类型转换
        //编译时类型Object 运行时类型String
        Object obj = new String("jiangxx");
       //obj.charAt(0); 无法调用。编译器认为obj时Object类型，而不是String类型
        // 编写程序时，如果像调用运行时类型的方法，只能进行强制类型转换，不然无法通过编译器检查
        String str = (String)obj;//强制类型转换
        System.out.println(str.charAt(0));
        System.out.println(str == obj);
        System.out.println(str.equals(obj));


        //StringBuffer strb = (StringBuffer)obj;
        //System.out.println(strb.charAt(0));//报错
        //ava.lang.ClassCastException: String cannot be cast toStringBuffer
        //真实的子类类型是String,但是此处向下转型为StringBuffer
        // 可以在向下转型中使用instanceof来避免此类情况

        if(obj instanceof String){
            String str1 = (String)obj;
            System.out.println(str1.charAt(1));
        }else if(obj instanceof StringBuffer){
            StringBuffer sb = (StringBuffer)obj;
            System.out.println(sb.charAt(1));
        }

    }
}
